﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using IgrMensageiros.Util;
using MODEL;

namespace IgrMensageiros.UI
{
    public partial class UI_CadMembros : Form
    {

        #region "Declarações"

        private static log4net.ILog log;
        DadosPessoais dadosPessoais = new DadosPessoais();

        #endregion

        public UI_CadMembros()
        {
            InitializeComponent();
            InicializarPanel();
            InicializarObjetos();
        }

        private void btnFechar_Click(object sender, EventArgs e)
        {
            try
            {
                Close();
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (dadosPessoais != null)
                    {
                        Salvar(dadosPessoais);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnSalvarFechar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    if (dadosPessoais != null)
                    {
                        Salvar(dadosPessoais);
                        Close();
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            try
            {
                Utils.LimparCampos(this);
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void txtBuscaCep_TextChanged(object sender, EventArgs e)
        {
            try
            {
                // Se o número de dígitos no txtCEP chegar a 8, realizar consulta.

                if (txtCep.Text.Length == 8)
                {
                    FazerConsulta(txtCep.Text);
                }
                else
                {
                    txtBairro.Clear();
                    txtEndereco.Clear();
                    txtUF.Clear();
                    txtCidade.Clear();
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void FazerConsulta(string Cep)
        {
            string[] resultado = ConsultarCep.FazerConsulta(Cep);
            if (resultado[0] != "Erro")
            {
                txtBairro.Text = resultado[0];
                txtEndereco.Text = resultado[1];
                txtUF.Text = resultado[2];
                txtCidade.Text = resultado[3];
            }
            else
            {
                MessageBox.Show(resultado[1], "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #region "Metodos"

        private Boolean Validar()
        {
            try
            {
                bool count;
                bool retorno = false;

                count = Utils.CamposObrigatorios(txtNome);
                count = Utils.CamposObrigatorios(cmbEstadoCivil);
                count = Utils.CamposObrigatorios(txtDataNascimento);
                count = Utils.CamposObrigatorios(txtCep);
                count = Utils.CamposObrigatorios(txtEndereco);
                count = Utils.CamposObrigatorios(txtBairro);
                count = Utils.CamposObrigatorios(txtNumero);

                if (count.GetHashCode() > 0)
                {
                    dadosPessoais.Status = rbAtivo.Checked ? Convert.ToChar("A") : Convert.ToChar("I");
                    dadosPessoais.Sexo = rbMasculino.Checked ? Convert.ToChar("M") : Convert.ToChar("F");
                    dadosPessoais.Nome = txtNome.Text;
                    dadosPessoais.Apelido = txtApelido.Text.ToString();
                    dadosPessoais.EstadoCivil = cmbEstadoCivil.SelectedItem.ToString();
                    dadosPessoais.DtNascimento = Convert.ToDateTime(txtDataNascimento.Text).Date;
                    dadosPessoais.RG = txtRg.ToString();
                    dadosPessoais.CPF = txtCpf.Text.ToString();
                    dadosPessoais.GrauInstrucao = cmbGrauInstrucao.SelectedItem.ToString();
                    dadosPessoais.FormacaoAcademica = txtFormacaoAcademica.Text.ToString();
                    
                    dadosPessoais.Enderecos.Bairros = txtBairro.Text.ToString();
                    dadosPessoais.Enderecos.Endereco = txtEndereco.Text.ToString();
                    dadosPessoais.Enderecos.Estado = txtUF.Text.ToString();
                    dadosPessoais.Enderecos.Numeros = txtNumero.Text.ToString();

                    dadosPessoais.DadosContatos.Email = txtEmail.Text.ToString();
                    dadosPessoais.DadosContatos.Facebook = txtFacebook.Text.ToString();
                    dadosPessoais.DadosContatos.EmpresaTrabalha = txtEmpresaTrabalha.Text.ToString();
                    dadosPessoais.DadosContatos.Facebook = txtFacebook.Text.ToString();
                    dadosPessoais.DadosContatos.TelefoneCelular = txtTelefoneCelular.Text.ToString();
                    dadosPessoais.DadosContatos.TelefoneEmpresa = txtTelefoneEmpresa.Text.ToString();
                    dadosPessoais.DadosContatos.TelefoneRecado = txtTelefoneRecado.Text.ToString();
                    dadosPessoais.DadosContatos.TelefoneResidencial = txtTelefoneResidencial.Text.ToString();

                    dadosPessoais.DadosMinisteriais.Carterinha = rbCarterinhaSim.Checked ? Convert.ToChar("S") : Convert.ToChar("N");
                    dadosPessoais.DadosMinisteriais.DtBatismo = Convert.ToDateTime(txtDataBatismo.Text).Date;
                    dadosPessoais.DadosMinisteriais.DtCongrega = Convert.ToDateTime(txtDataCongrega.Text).Date;
                    dadosPessoais.DadosMinisteriais.BatizadoIgreja = txtBatizadoIgreja.Text.ToString();
                    dadosPessoais.DadosMinisteriais.CargoMinisterial = cmbCargoMinisterial.SelectedItem.ToString();
                    dadosPessoais.DadosMinisteriais.Frequenta = cmbFrequenta.SelectedItem.ToString();
                    dadosPessoais.DadosMinisteriais.FuncaoExerce = txtFuncaoExerce.Text.ToString();
                    dadosPessoais.DadosMinisteriais.DonsHabilidades = txtDonsHabilidades.Text.ToString();

                    dadosPessoais.DadosFamiliares.Casado = rbCasadoSim.Checked ? Convert.ToChar("S") : Convert.ToChar("N");
                    dadosPessoais.DadosFamiliares.Evangelico = rbEvangelicoSim.Checked ? Convert.ToChar("S") : Convert.ToChar("N");
                    dadosPessoais.DadosFamiliares.DtCasamento = Convert.ToDateTime(txtDataCasamento.Text).Date;
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome1.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome2.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome3.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome4.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome5.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome6.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome7.Text.ToString();
                    dadosPessoais.DadosFamiliares.NomeFilhos = txtNome8.Text.ToString();

                    retorno = true;
                }
                else
                {
                    Mensagem(Utils.Const_PreencherCampos);
                }

                return retorno;
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void InicializarPanel()
        {
            panel.Visible = false;
            lblMensagem.Text = "";
        }

        private void Salvar(DadosPessoais pDadosPessoais)
        {
            MembrosBLL igrejasBLL = new MembrosBLL();
            try
            {
                if (igrejasBLL.Gravar(pDadosPessoais))
                {
                    Mensagem(Utils.Const_RegistroSalvo);
                }
                else
                {
                   Mensagem(Utils.Const_RegistroJaCadastrado);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }

        private void InicializarObjetos()
        {
            rbAtivo.Checked = true;
            rbMasculino.Checked = true;
            rbCarterinhaSim.Checked = true;
            rbCasadoSim.Checked = true;
            rbEvangelicoSim.Checked = true;
        }

        private String Mensagem(String pMensagem)
        {
            panel.Visible = true;
            lblMensagem.Visible = true;
            return lblMensagem.Text = pMensagem;
        }

        #endregion
    }
}
    

